package top.csy8888.ch01.config;

import jakarta.servlet.MultipartConfigElement;
import jakarta.servlet.ServletRegistration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * @author CSY
 * @date 2025 - 09 - 02
 */
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{RootConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    /**
     * 自定义servlet配置 - 给DispatcherServlet
     * 例如：启用DispatcherServlet上传功能
     * @param registration
     */
    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        //创建上传配置对象 - 设置上传的限制
        //参数一：上传的根目录
        //参数二：限制单个文件上传的大小（字节）
        //参数三：限制本次请求中所有文件的总大小
        //参数四：当达到指定大小时，将写入文件
        MultipartConfigElement configElement = new MultipartConfigElement("",20971520,
                1024L *1024*1024*2,2097152);
        //注册上传配置
        registration.setMultipartConfig(configElement);
        //让DispatcherServlet在启动web容器时就初始化 - 唯一
        registration.setLoadOnStartup(0);
    }
}
